home *** CD-ROM | disk | FTP | other *** search
- unit Dllskexp;
- interface
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, Buttons, StdCtrls, ExptIntf, ToolIntf;
-
- type
- TDLLSKeletonGenerator = class(TForm)
- Main: TGroupBox;
- DLLLabel: TLabel;
- DLLName: TEdit;
- ExitCode: TGroupBox;
- FunctionCheckBox: TCheckBox;
- ProcedureCheckBox: TCheckBox;
- Ok: TBitBtn;
- Cancel: TBitBtn;
- Help: TBitBtn;
- ExampleCode: TGroupBox;
- ExitProcCheckBox: TCheckBox;
- BPWCompatibleCheckBox: TCheckBox;
- ResourceCheckBox: TCheckBox;
-
- procedure DLLNameChange(Sender: TObject);
- procedure CancelClick(Sender: TObject);
- procedure HelpClick(Sender: TObject);
- procedure ExitProcCheckBoxClick(Sender: TObject);
- procedure OkClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- DLLSKeletonGenerator: TDLLSKeletonGenerator;
-
- Type
- TDLLSkeletonStandardExpert = class(TIExpert)
- public
- { Expert Style }
- function GetStyle: TExpertStyle; override;
- { Expert Strings }
- function GetIDString: string; override;
- function GetName: string; override;
- function GetComment: string; override;
- function GetGlyph: HBITMAP; override;
- function GetState: TExpertState; override;
- function GetMenuText: string; override;
- { Launch the Expert }
- procedure Execute; override;
- end;
-
- TDLLSkeletonProjectExpert = class(TDLLSkeletonStandardExpert)
- public
- { Expert Style }
- function GetStyle: TExpertStyle; override;
- { Expert Strings }
- function GetIDString: string; override;
- function GetComment: string; override;
- function GetGlyph: HBITMAP; override;
- end;
-
- procedure Register;
-
- implementation
-
- {$R *.DFM}
-
- procedure TDLLSKeletonGenerator.DLLNameChange(Sender: TObject);
- begin
- ExitProcCheckBox.Caption := 'procedure '+DLLName.Text+'ExitProc;';
- ResourceCheckBox.Caption := 'Include {$R '+DLLName.Text+'.RES};';
- end;
-
- procedure TDLLSKeletonGenerator.ExitProcCheckBoxClick(Sender: TObject);
- { if ExitProcChecked is False, then BPWCompatibleCheckBox is irrelevant,
- otherwise it should be set to True by default.
- }
- begin
- BPWCompatibleCheckBox.Checked := ExitProcCheckBox.Checked;
- BPWCompatibleCheckBox.Enabled := ExitProcCheckBox.Checked
- end;
-
- procedure TDLLSKeletonGenerator.CancelClick(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TDLLSKeletonGenerator.HelpClick(Sender: TObject);
- begin
- MessageDlg('Read the article in *The Delphi Magazine* for in-depth information'#13+
- 'on how to write your own Delphi Experts! (send an e-mail message'#13+
- 'to the editor Chris Frizelle at 70630.717@compuserve.com for free'#13+
- 'sample issue). Full source will be on subscribers'' disk...',
- mtInformation, [mbOk], 0);
- end;
-
- procedure TDLLSKeletonGenerator.OkClick(Sender: TObject);
- var f: System.Text;
- begin
- if (DLLName.Text <> '') and
- ((not FileExists(ExtractFileName(DLLName.Text)+'.PAS')) or
- (MessageDlg('File '+ExtractFileName(DLLName.Text)+'.PAS exists. Overwrite?',
- mtConfirmation, [mbYes,mbNo], 0) = IdYes)) then
- begin
- System.Assign(f,ExtractFileName(DLLName.Text)+'.PAS');
- Rewrite(f);
- writeln(f,'library ',ExtractFileName(DLLName.Text),';');
- writeln(f,'{ Generated by DLL Skeleton Expert (c) 1995 by Dr.Bob for The Delphi Magazine }');
- if ExitProcCheckBox.Checked and not BPWCompatibleCheckBox.Checked then
- writeln(f,'uses WinTypes, WinProcs, SysUtils;')
- else writeln(f,'uses WinTypes, WinProcs;');
- writeln(f);
- { Resources }
- if ResourceCheckBox.Checked then
- begin
- writeln(f,'{$R ',ExtractFileName(DLLName.Text),'.RES}');
- writeln(f)
- end;
- { Functions & Procedures }
- if FunctionCheckBox.Checked then
- begin
- writeln(f,' function Max(X,Y: Integer): Integer; export;');
- writeln(f,' begin');
- writeln(f,' if X > Y then Max := X');
- writeln(f,' else Max := Y');
- writeln(f,' end {Max};');
- writeln(f)
- end;
- if ProcedureCheckBox.Checked then
- begin
- writeln(f,' procedure Swap(var X,Y: Integer); export;');
- writeln(f,' var Z: Integer;');
- writeln(f,' begin');
- writeln(f,' Z := X;');
- writeln(f,' X := Y;');
- writeln(f,' Y := Z');
- writeln(f,' end {Swap};');
- writeln(f)
- end;
- { Exports }
- if FunctionCheckBox.Checked or ProcedureCheckBox.Checked then
- begin
- write(f,'exports ');
- if FunctionCheckBox.Checked then write(f,'max index 1');
- if ProcedureCheckBox.Checked then
- begin
- if FunctionCheckBox.Checked then
- begin
- writeln(f,',');
- write(f,' ':7);
- end;
- write(f,'swap index 2');
- end;
- writeln(f,';');
- writeln(f)
- end;
- { Exitproc }
- if ExitProcCheckBox.Checked then
- begin
- if BPWCompatibleCheckBox.Checked then
- begin
- writeln(f,'var SaveExit: pointer;');
- writeln(f)
- end;
- writeln(f,' procedure ',ExtractFileName(DLLName.Text),'ExitProc; far;');
- writeln(f,' begin');
- if BPWCompatibleCheckBox.Checked then
- writeln(f,' ExitProc := SaveExit;');
- writeln(f,' { WEP & cleanup }');
- writeln(f,' end;');
- writeln(f);
- end;
- { Begin }
- writeln(f,'begin');
- if ExitProcCheckBox.Checked then
- begin
- if BPWCompatibleCheckBox.Checked then
- begin
- writeln(f,' SaveExit := ExitProc;');
- writeln(f,' ExitProc := @',ExtractFileName(DLLName.Text),'ExitProc;')
- end
- else
- writeln(f,' AddExitProc(',ExtractFileName(DLLName.Text),'ExitProc);')
- end;
- writeln(f,'end.');
- System.Close(f);
-
- if ToolServices <> nil then { I'm an expert!! }
- begin
- if ToolServices.CloseProject then
- ToolServices.OpenProject(ExtractFileName(DLLName.Text)+'.PAS');
- Close
- end
- end
- end;
-
-
- function TDLLSkeletonStandardExpert.GetStyle: TExpertStyle;
- begin
- Result := esStandard
- end;
-
- function TDLLSkeletonStandardExpert.GetIDString: String;
- begin
- Result := 'DrBob.StandardDLLSkExp'
- end;
-
- function TDLLSkeletonStandardExpert.GetComment: String;
- begin
- Result := '' { not needed for esStandard }
- end;
-
- function TDLLSkeletonStandardExpert.GetGlyph: HBITMAP;
- begin
- Result := 0 { not needed for esStandard }
- end;
-
- function TDLLSkeletonStandardExpert.GetName: String;
- begin
- Result := 'DLL Skeleton Generator'
- end;
-
- function TDLLSkeletonStandardExpert.GetState: TExpertState;
- begin
- Result := [esEnabled]
- end;
-
- function TDLLSkeletonStandardExpert.GetMenuText: String;
- begin
- Result := 'Dr.&Bob''s DLL Skeleton Expert...'
- end;
-
- procedure TDLLSkeletonStandardExpert.Execute;
- begin
- if not Assigned(DLLSkeletonGenerator) then
- DLLSkeletonGenerator := TDLLSkeletonGenerator.Create(Application);
- DLLSkeletonGenerator.Show;
- DLLSkeletonGenerator.SetFocus
- end;
-
- {$R DLLSKEXP.RES}
- Const
- DLLSKEXPBITMAP = 666; { Bitmap ID }
-
- function TDLLSkeletonProjectExpert.GetStyle: TExpertStyle;
- begin
- Result := esProject
- end;
-
- function TDLLSkeletonProjectExpert.GetIDString: String;
- begin
- Result := 'DrBob.ProjectDLLSkExp'
- end;
-
- function TDLLSkeletonProjectExpert.GetComment: String;
- begin
- Result := 'This Project Experts generates and opens a DLL Skeleton Source File'#13+
- 'DLL Skeleton Expert (c) 1995 by Dr.Bob for The Delphi Magazine';
- end;
-
- function TDLLSkeletonProjectExpert.GetGlyph: HBITMAP;
- begin
- Result := LoadBitMap(HInstance, MakeIntResource(DLLSKEXPBITMAP))
- end;
-
-
- procedure Register;
- begin
- RegisterLibraryExpert(TDLLSkeletonStandardExpert.Create);
- RegisterLibraryExpert(TDLLSkeletonProjectExpert.Create)
- end;
-
- end.
-